
#ifndef _OFPRINT_COMMON_H_
#define _OFPRINT_COMMON_H_


#ifdef  __cplusplus
extern "C" {
#endif

#include<glib.h>
#include<libusb.h>


//#define OFP_FPRINT_LIST_FILE	"/mnt/hgfs/ofplist.conf"
#define OFP_FPRINT_LIST_FILE	"/opt/apps/ofilm.oms.Ofprint/files/conf/ofplist.conf"
#define OFP_DRIVER_CONFIG_FILE	"/opt/apps/ofilm.oms.Ofprint/files/conf/fp_driver.conf"
#define OFP_FPRINT_ENABLE		"enable"
#define OFP_FPRINT_USER_ID		"user_id"
#define OFP_FPRINT_NAME			"fprint_name"
#define OFP_FPRINT_ID			"fprint_id"

#define	OFP_DEVICE_PARAM		"DeviceParam"
#define OFP_DEVICE_ENABLE		"enable"
#define OFP_MODE_FLAG			"ModeFlag"
#define OFP_REBOOT_FLAG			"RebootFlag"
#define PRINTF_LOG_FLAG			"PrintfLogFlag"	//输出日志标志，0表示不输出，1表示输出

#define BASIC_PARAM				"BASIC_PARAM"
#define UPGRADE_MODE			"UpgradeMode"
#define AUTO_SUSPEND			"AutoSuspend"

// 定义升级模式
#define STR_FORCE_UPGRADE		"FORCE_UPGRADE"
#define STR_DONT_UPGRADE		"DONT_UPGRADE"
#define STR_AUTO_UPGRADE		"AUTO_UPGRADE"
#define STR_SMART_UPGRADE		"SMART_UPGRADE"

#define STR_UPGRADE_FLAG		"UpgradeFlag"


#define OFP_LOG_FILE_NAME "/opt/apps/ofilm.oms.Ofprint/files/conf/log_ofp.txt"

#define PRINT_LOG_MAX_SIZE	500


#define OFP_FPRINT_NUM_MAX	50	//最大录入指纹数量
#define OFP_GROUP_NAME_MAX	100	//指纹组名称最大长度
#define OFP_USER_ID_LEN_MAX	100	//用户id最大长度
#define OFP_FPRINT_NAME_LEN_MAX	100	//指纹名称最大长度

#define OFP_MSG_SIZE_MAX	1024	//消息最大长度


/* 定义输出消息的等级，与Linux内核中printk的等级定义一致 */
#define OFP_PRINT_LEVEL_EMERG	0
#define OFP_PRINT_LEVEL_ALERT	1
#define OFP_PRINT_LEVEL_CRIT	2
#define OFP_PRINT_LEVEL_ERROR	3	// 错误信息
#define OFP_PRINT_LEVEL_WARN	4	// 警告信息
#define OFP_PRINT_LEVEL_NOTICE	5	// 提示信息
#define OFP_PRINT_LEVEL_INFO	6	// 运行时信息
#define OFP_PRINT_LEVEL_DEBUG	7	// 调试信息


/* 定义输出控制等级及开关（环境变量） */
#define OFP_PRINT_LEVEL_DEFAULT	OFP_PRINT_LEVEL_NOTICE	// 默认输出信息等级

/* 定义文件路径最大长度 */
#define MAX_PATH_LEN 1024

/* 定义默认的操作超时时间 */
#define OFP_OPS_DEFAULT_TIMEOUT 30

/* 版本信息 */
typedef struct api_version_t api_version;
struct api_version_t
{
	int major;
	int minor;
	int function;
};


/* USB设备热插拔行为 */
typedef enum {
	USB_HOT_PLUG_ATTACHED = 1,			/** USB设备接入 **/
	USB_HOT_PLUG_DETACHED = -1,			/** USB设备拔出 **/
}USBHotPlugActions;


/* USB设备硬件信息 */
struct usb_id {
	uint16_t idVendor;
	uint16_t idProduct;
	char * description;
};

/* USB设备额外的驱动信息 */
struct USB_INFO {
	const struct usb_id * id_table;
	libusb_hotplug_callback_handle callback_handle[2];
	unsigned long driver_data;
};


/* 定义操作类型 */
typedef enum {
	OPS_TYPE_COMM = 0,
	OPS_TYPE_OPEN,
	OPS_TYPE_ENROLL,
	OPS_TYPE_VERIFY,
	OPS_TYPE_IDENTIFY,
	OPS_TYPE_CAPTURE,
	OPS_TYPE_SEARCH,
	OPS_TYPE_CLEAN,
	OPS_TYPE_GET_FLIST,
	OPS_TYPE_RENAME,
    OPS_TYPE_CLOSE,
    OPS_TYPE_ENROLL_PROCESS,
}BioOpsType;

/*
 * 定义设备当前的状态
 * 一般来说，设备只会处于两种状态：设备正在处理中，设备空闲
 */
typedef enum {
	DEVS_COMM_IDLE = OPS_TYPE_COMM * 100,	/** 空闲状态 **/
	DEVS_COMM_DOING,						/** 设备正在处理中 **/
	DEVS_COMM_STOP_BY_USER,					/** 设备操作被终止 **/
	DEVS_COMM_DISABLE,						/** 设备被禁用 **/
	DEVS_COMM_MAX,

	DEVS_OPEN_DOING = OPS_TYPE_OPEN * 100 + 1,	/** 正在打开设备 **/
	DEVS_OPEN_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_OPEN_MAX,

	DEVS_ENROLL_DOING = OPS_TYPE_ENROLL * 100 + 1,	/** 正在录入 **/
	DEVS_ENROLL_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_ENROLL_MAX,

	DEVS_VERIFY_DOING = OPS_TYPE_VERIFY * 100 + 1,	/** 正在认证 **/
	DEVS_VERIFY_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_VERIFY_MAX,

	DEVS_IDENTIFY_DOING = OPS_TYPE_IDENTIFY * 100 + 1,	/** 正在识别指定特征 **/
	DEVS_IDENTIFY_STOP_BY_USER,							/** 打开操作被终止 **/
	DEVS_IDENTIFY_MAX,

	DEVS_CAPTURE_DOING = OPS_TYPE_CAPTURE * 100 + 1,	/** 正在捕获信息 **/
	DEVS_CAPTURE_STOP_BY_USER,							/** 打开操作被终止 **/
	DEVS_CAPTURE_MAX,

	DEVS_SEARCH_DOING = OPS_TYPE_SEARCH * 100 + 1,	/** 正在搜索指定特征 **/
	DEVS_SEARCH_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_SEARCH_MAX,

	DEVS_CLEAN_DOING = OPS_TYPE_CLEAN * 100 + 1,	/** 正在清理特征数据 **/
	DEVS_CLEAN_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_CLEAN_MAX,

	DEVS_GET_FLIST_DOING = OPS_TYPE_GET_FLIST * 100 + 1,	/** 正在获取特征列表 **/
	DEVS_GET_FLIST_STOP_BY_USER,							/** 获取特征列表操作被终止 **/
	DEVS_GET_FLIST_MAX,

	DEVS_RENAME_DOING = OPS_TYPE_RENAME * 100 + 1,	/** 正在重命名特征 **/
	DEVS_RENAME_STOP_BY_USER,						/** 重命名特征操作被终止 **/
	DEVS_RENAME_MAX,

	DEVS_CLOSE_DOING = OPS_TYPE_CLOSE * 100 + 1,	/** 正在关闭设备 **/
	DEVS_CLOSE_STOP_BY_USER,						/** 打开操作被终止 **/
	DEVS_CLOSE_MAX,
}DevStatus;

/*
 * 定义各种操作结果
 */
typedef enum {
	OPS_COMM_SUCCESS = OPS_TYPE_COMM * 100,	/** 空闲状态 **/
	OPS_COMM_FAIL,							/** 操作失败 **/
	OPS_COMM_NO_MATCH = OPS_COMM_FAIL,		/** 不匹配 **/
	OPS_COMM_ERROR,							/** 通用操作错误 **/
	OPS_COMM_STOP_BY_USER,					/** 用户取消 **/
	OPS_COMM_TIMEOUT,						/** 操作超时 **/
	OPS_COMM_OUT_OF_MEM,					/** 无法分配内存 **/
	OPS_COMM_MAX,

	OPS_OPEN_SUCCESS = OPS_TYPE_OPEN * 100,	/** 打开设备完成 **/
	OPS_OPEN_FAIL,							/** 打开设备失败 **/
	OPS_OPEN_ERROR,							/** 打开设备遇到错误 **/
	OPS_OPEN_MAX,

	OPS_ENROLL_SUCCESS = OPS_TYPE_ENROLL * 100,	/** 录入信息成功 **/
	OPS_ENROLL_FAIL,							/** 录入失败 **/
	OPS_ENROLL_ERROR,							/** 录入过程中遇到错误 **/
	OPS_ENROLL_STOP_BY_USER,					/** 录入被用户中断 **/
	OPS_ENROLL_TIMEOUT,							/** 操作超时 **/
	OPS_ENROLL_MAX,

	OPS_VERIFY_MATCH = OPS_TYPE_VERIFY * 100,	/** 认证匹配 **/
	OPS_VERIFY_NO_MATCH,						/** 认证不匹配 **/
	OPS_VERIFY_ERROR,							/** 认证过程中遇到错误 **/
	OPS_VERIFY_STOP_BY_USER,					/** 认证被用户中断 **/
	OPS_VERIFY_TIMEOUT,							/** 操作超时 **/
	OPS_VERIFY_MAX,

	OPS_IDENTIFY_MATCH = OPS_TYPE_IDENTIFY * 100,	/** 识别到指定特征 **/
	OPS_IDENTIFY_NO_MATCH,							/** 未识别出指定特征 **/
	OPS_IDENTIFY_ERROR,								/** 识别过程中遇到错误 **/
	OPS_IDENTIFY_STOP_BY_USER,						/** 识别被用户中断 **/
	OPS_IDENTIFY_TIMEOUT,							/** 操作超时 **/
	OPS_IDENTIFY_MAX,

	OPS_CAPTURE_SUCCESS = OPS_TYPE_CAPTURE * 100,	/** 捕获成功 **/
	OPS_CAPTURE_FAIL,								/** 捕获失败 **/
	OPS_CAPTURE_ERROR,								/** 捕获过程中遇到错误 **/
	OPS_CAPTURE_STOP_BY_USER,						/** 捕获被用户中断 **/
	OPS_CAPTURE_TIMEOUT,							/** 操作超时 **/
	OPS_CAPTURE_MAX,

	OPS_SEARCH_MATCH = OPS_TYPE_SEARCH * 100,	/** 搜索到指定特征 **/
	OPS_SEARCH_NO_MATCH,						/** 未搜索到指定特征 **/
	OPS_SEARCH_ERROR,							/** 搜索过程中遇到错误 **/
	OPS_SEARCH_STOP_BY_USER,					/** 搜索被用户中断 **/
	OPS_SEARCH_TIMEOUT,							/** 操作超时 **/
	OPS_SEARCH_MAX,

	OPS_CLEAN_SUCCESS = OPS_TYPE_CLEAN * 100,	/** 清理特征成功 **/
	OPS_CLEAN_FAIL,								/** 清理失败 **/
	OPS_CLEAN_ERROR,							/** 清理过程中遇到错误 **/
	OPS_CLEAN_STOP_BY_USER,						/** 清理被用户中断 **/
	OPS_CLEAN_TIMEOUT,							/** 操作超时 **/
	OPS_CLEAN_MAX,

	OPS_GET_FLIST_SUCCESS = OPS_TYPE_GET_FLIST * 100,	/** 获取特征列表完成 **/
	OPS_GET_FLIST_FAIL,									/** 获取特征列表失败 **/
	OPS_GET_FLIST_ERROR,								/** 获取特征列表过程中遇到错误 **/
	OPS_GET_FLIST_STOP_BY_USER,							/** 获取特征列表被用户中断 **/
	OPS_GET_FLIST_TIMEOUT,								/** 获取特征列表超时 **/
	OPS_GET_FLIST_MAX,

	OPS_RENAME_SUCCESS = OPS_TYPE_RENAME * 100,	/** 重命名特征完成 **/
	OPS_RENAME_FAIL,							/** 重命名特征失败 **/
	OPS_RENAME_ERROR,							/** 重命名特征过程中遇到错误 **/
	OPS_RENAME_STOP_BY_USER,					/** 重命名特征被用户中断 **/
	OPS_RENAME_TIMEOUT,							/** 重命名特征超时 **/
	OPS_RENAME_MAX,

	OPS_CLOSE_SUCCESS = OPS_TYPE_CLOSE * 100,	/** 关闭设备完成 **/
	OPS_CLOSE_FAIL,								/** 关闭设备失败 **/
	OPS_CLOSE_ERROR,							/** 关闭设备过程中遇到错误 **/
	OPS_CLOSE_MAX,
}OpsResult;

/*
 * 定义各种面向用户的提示消息
 */
typedef enum {
	NOTIFY_COMM_IDLE = OPS_TYPE_COMM * 100,		/** 空闲状态 **/
	NOTIFY_COMM_SUCCESS = NOTIFY_COMM_IDLE,		/** 操作成功 **/
	NOTIFY_COMM_FAIL,							/** 操作失败 **/
	NOTIFY_COMM_NO_MATCH = NOTIFY_COMM_FAIL,	/** 不匹配 **/
	NOTIFY_COMM_ERROR,							/** 操作过程中遇到错误 **/
	NOTIFY_COMM_STOP_BY_USER,					/** 用户中断 **/
	NOTIFY_COMM_TIMEOUT,						/** 操作超时 **/
	NOTIFY_COMM_DISABLE,						/** 设备不可用 **/
	NOTIFY_COMM_OUT_OF_MEM,
	NOTIFY_COMM_UNSUPPORTED_OPS,				/** 不支持的操作 **/
	NOTIFY_COMM_MAX,

	NOTIFY_OPEN_SUCCESS = OPS_TYPE_OPEN * 100,	/** 打开设备完成 **/
	NOTIFY_OPEN_FAIL,							/** 打开设备失败 **/
	NOTIFY_OPEN_ERROR,							/** 打开设备过程中遇到错误 **/
	NOTIFY_OPEN_MAX,

	NOTIFY_ENROLL_SUCCESS = OPS_TYPE_ENROLL * 100,	/** 录入信息成功 **/
	NOTIFY_ENROLL_FAIL,								/** 录入失败 **/
	NOTIFY_ENROLL_ERROR,							/** 录入过程中遇到错误 **/
	NOTIFY_ENROLL_STOP_BY_USER,						/** 录入被用户中断 **/
	NOTIFY_ENROLL_TIMEOUT,							/** 操作超时 **/
	NOTIFY_ENROLL_MAX,

	NOTIFY_VERIFY_MATCH = OPS_TYPE_VERIFY * 100,	/** 认证匹配 **/
	NOTIFY_VERIFY_NO_MATCH,							/** 认证不匹配 **/
	NOTIFY_VERIFY_ERROR,							/** 认真过程中遇到错误 **/
	NOTIFY_VERIFY_STOP_BY_USER,						/** 认证被用户中断 **/
	NOTIFY_VERIFY_TIMEOUT,							/** 操作超时 **/
	NOTIFY_VERIFY_MAX,

	NOTIFY_IDENTIFY_MATCH = OPS_TYPE_IDENTIFY * 100,	/** 识别到指定特征 **/
	NOTIFY_IDENTIFY_NO_MATCH,							/** 未识别出指定特征 **/
	NOTIFY_IDENTIFY_ERROR,								/** 识别过程中遇到错误 **/
	NOTIFY_IDENTIFY_STOP_BY_USER,						/** 识别被用户中断 **/
	NOTIFY_IDENTIFY_TIMEOUT,							/** 操作超时 **/
	NOTIFY_IDENTIFY_MAX,

	NOTIFY_CAPTURE_SUCCESS = OPS_TYPE_CAPTURE * 100,	/** 捕获成功 **/
	NOTIFY_CAPTURE_FAIL,								/** 捕获失败 **/
	NOTIFY_CAPTURE_ERROR,								/** 捕获过程中遇到错误 **/
	NOTIFY_CAPTURE_STOP_BY_USER,						/** 捕获被用户中断 **/
	NOTIFY_CAPTURE_TIMEOUT,								/** 操作超时 **/
	NOTIFY_CAPTURE_MAX,

	NOTIFY_SEARCH_MATCH = OPS_TYPE_SEARCH * 100,	/** 搜索到指定特征 **/
	NOTIFY_SEARCH_NO_MATCH,							/** 未搜索到指定特征 **/
	NOTIFY_SEARCH_ERROR,							/** 搜索过程中遇到错误 **/
	NOTIFY_SEARCH_STOP_BY_USER,						/** 搜索被用户中断 **/
	NOTIFY_SEARCH_TIMEOUT,							/** 操作超时 **/
	NOTIFY_SEARCH_MAX,

	NOTIFY_CLEAN_SUCCESS = OPS_TYPE_CLEAN * 100,	/** 清理特征成功 **/
	NOTIFY_CLEAN_FAIL,								/** 清理失败 **/
	NOTIFY_CLEAN_ERROR,								/** 清理过程中遇到错误 **/
	NOTIFY_CLEAN_STOP_BY_USER,						/** 清理被用户中断 **/
	NOTIFY_CLEAN_TIMEOUT,							/** 操作超时 **/
	NOTIFY_CLEAN_MAX,

	NOTIFY_GET_FLIST_SUCCESS = OPS_TYPE_GET_FLIST * 100,	/** 获取特征列表完成 **/
	NOTIFY_GET_FLIST_FAIL,									/** 获取特征列表失败 **/
	NOTIFY_GET_FLIST_ERROR,									/** 获取特征列表过程中遇到错误 **/
	NOTIFY_GET_FLIST_STOP_BY_USER,							/** 获取特征列表被用户中断 **/
	NOTIFY_GET_FLIST_TIMEOUT,								/** 获取特征列表超时 **/
	NOTIFY_GET_FLIST_MAX,

	NOTIFY_RENAME_SUCCESS = OPS_TYPE_RENAME * 100,		/** 重命名特征完成 **/
	NOTIFY_RENAME_FAIL,									/** 重命名特征失败 **/
	NOTIFY_RENAME_ERROR,								/** 重命名特征过程中遇到错误 **/
	NOTIFY_RENAME_INCOMPLETE,							/** 重命名特征不完全 **/

	NOTIFY_CLOSE_SUCCESS = OPS_TYPE_CLOSE * 100,		/** 关闭设备完成 **/
	NOTIFY_CLOSE_FAIL,									/** 关闭设备失败 **/
	NOTIFY_CLOSE_ERROR,									/** 关闭设备过程中遇到错误 **/
	NOTIFY_CLOSE_MAX,
}NotifyMID;


/* 定义状态类型，用于通知服务层设备状态的改变 */
typedef enum {
	STATUS_TYPE_DEVICE = 0,
	STATUS_TYPE_OPERATION,
    STATUS_TYPE_NOTIFY
}StatusType;

/*
 * 生物特征识别框架核心结构体，用于记录驱动与设备相关信息
 * 正常情况下，一台机器上同一型号设备只会接入一台，所以框架将驱动与设备简化成一个结构体
 */
typedef struct ofp_dev_t ofp_dev;
struct ofp_dev_t {
	// 设备、驱动基本信息
	int driver_id;			/** 驱动ID **/
	char *device_name;		/** 设备名 **/
	char *full_name;		/** 设备全称 **/
	api_version drv_api_version;
	int enable;				/** 设备是否被禁用 **/
	int dev_num;			/** 设备数量 **/

	// 总线信息
	struct USB_INFO		usb_info;

	// 设备、驱动私有信息
	void *dev_priv;			/** 设备驱动私有结构体 **/
    pthread_mutex_t mutex; /* libusb 库存在大量线程不安全函数，需要加锁包含 */
    pthread_mutex_t bulk_mutex; /* libusb 为bulk传输专门加锁 */


	// 边界值
	int max_user;
	int max_sample;
	int sample_times;

	/*
	 * 记录设备的状态信息：
	 *
	 * DevStatus dev_status 用于记录设备当前状态：“使用中”或者“空闲”
	 * OpsResult ops_result 用于记录对设备操作的结果
	 *                      注意：各个设备操作函数的返回值只是操作结果的辅助信息，最终的
	 *                           结果判断是依据ops_result的值来确定的。
	 * NotifyMID notify_mid 用于人机交互，记录需要展示给用户看的消息的ID
	 */
	volatile DevStatus dev_status;	/** 设备状态 **/
	volatile OpsResult ops_result;	/** 操作结果 **/
	volatile NotifyMID notify_mid;	/** 给用户的消息ID **/

	// 指向驱动的句柄，由框架使用，驱动请勿修改该值
	void * plugin_handle;

	void (*ops_free)(ofp_dev *dev);

	/*
	 * 设备发现
	 *   检测系统环境中接入驱动支持的设备数量
	 *
	 * @param[in]	dev		驱动和设备的结构体
	 * @return		探测到的设备数量。如果过程中遇到错误，则返回负值
	 */
	int (*ops_discover)(ofp_dev *dev);
};

// 扩展提示信息的长度
#define EXTRA_INFO_LENGTH 1024

// 状态控制标志定义
#define CONTROL_FLAG_IDLE 0
#define CONTROL_FLAG_RUNNING 1
#define CONTROL_FLAG_STOPING 2
#define CONTROL_FLAG_STOPPED 3
#define CONTROL_FLAG_DONE 4


// 定义操作提示
enum demo_notify_mid {
	MID_EXTENDED_MESSAGE = NOTIFY_COMM_MAX + 1, // 定义扩展信息
};

// 定义升级模式
typedef enum _UPGRADE_MODE_TYPE_
{
	FORCE_UPGRADE = 1,//不判断版本，强制升级
	DONT_UPGRADE = 2,//不执行升级
	AUTO_UPGRADE = 3,//判断版本不同则升级
	SMART_UPGRADE = 4,//判断新版本高于实际版本则升级
}UPGRADE_MODE_TYPE;


// 指纹信息结构体
typedef struct fprint_info_t fprint_info;
struct fprint_info_t {
	// 是否录入指纹
	gboolean enable;
	// 用户id
	char user_id[OFP_USER_ID_LEN_MAX];
	// 指纹名称
	char fprint_name[OFP_FPRINT_NAME_LEN_MAX];
	// 指纹ID
	uint16 fprint_id;
};


// 指纹信息结构体
typedef struct _DRIVER_CONFIG_STRUCT_
{
	UPGRADE_MODE_TYPE upgrade_mode;	//升级模式
	uint8	autosuspend_flag;	//自动挂起标志，0: 不自动挂起，1: 开启自动挂起
	int upgrade_flag;
}DRIVER_CONFIG_STRUCT;



// 驱动私有结构体
// 设备驱动私有结构体， 指向设备驱动还需要的额外结构体
typedef struct driver_info_t driver_info;
struct driver_info_t {
	// 超时时间， 单位毫秒
	int timeoutMS;
	// 控制标志
	int ctrlFlag;
	// 扩展提示信息（ 后续将用到）
	char extra_info[EXTRA_INFO_LENGTH];


	uint8 dev_state;//指纹设备状态
	int mode_flag;//设备模式
	int reboot_flag;//reboot标志
	fprint_info fprint_list[OFP_FPRINT_NUM_MAX];// 指纹列表信息
	//当前用户id
	char user_id[OFP_USER_ID_LEN_MAX];

	DRIVER_CONFIG_STRUCT config;

	int (*set_dev_state)(uint8 state);
};

//extern ofp_dev * ofp_dev_new();
extern ofp_dev *dev_ofprint;

extern int ofp_dev_init(void);
extern int ofp_drv_init(ofp_dev *dev);

extern void ofp_dev_free(ofp_dev * dev);
extern void ofp_ops_free(ofp_dev *dev);
extern int ofp_conf_init();
//extern void ofp_conf_free();
extern int ofp_get_fprint_list(ofp_dev *dev);
extern int ofp_add_fprint_info(ofp_dev *dev, fprint_info *fprint_info);
extern int ofp_del_fprint_info(ofp_dev *dev, char *user_id, char *fprint_name);
extern int ofp_find_fprint_info_byfprintid(ofp_dev *dev, uint16 fprintid, fprint_info **fprint_found);
extern int ofp_find_fprint_info(ofp_dev *dev, char *user_id, char *fprint_name, fprint_info **fprint_found);
extern int ofp_set_fprint_info(ofp_dev *dev, int index, fprint_info *xfprint_info);
extern void ofp_set_dev_status(ofp_dev * dev, int status);
extern int ofp_get_dev_status(ofp_dev * dev);
extern void ofp_status_changed_common_callback(int drvid, int type);
extern int32 driver_config_init(DRIVER_CONFIG_STRUCT *config);



#ifdef  __cplusplus
}
#endif

#endif // BIOMETRIC_COMM_H

